home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 47
/
Amiga Format AFCD47 (Issue 131, Xmas 1999).iso
/
-serious-
/
emulation
/
electrostatic
/
hidden
/
mos6507.i
< prev
next >
Wrap
Text File
|
1999-10-04
|
18KB
|
1,586 lines
; File: MOS6507.i
; Author: Neil Cafferkey
; ======================
; Translations for MOS 6507 microprocessor instructions.
;
; $VER: MOS6507.i 1.1 (17.6.99)
;
ifnd mos6507_i
mos6507_i set 1
; 68020 Condition Codes
; =====================
extend equ 4
negative equ 3
zero equ 2
overflow equ 1
carry equ 0
INTERRUPT_VECTOR equ $fffe
STACK_PAGE equ $0 ; should be $100 for other systems
machine 68020
opt 0
ADDR_MASK equ $1fff ; Makes a 13-bit address
; Register definitions
; ====================
A equr d2
X equr d3
Y equr d4
P equr d5
D_FLAG equr d6
S equr d7
DATA equr a2
CLOCK equr a3 ; this is an address register so that adding to it
; won't affect condition codes
ENV equr a4
; Macro to save status flags
; ==========================
macro SAVE_P
move.w ccr,d0
and.b #\1,d0 ; clear irrelevant bits in ccr
and.b #~\1,P ; clear relevant bits in P
or.b d0,P ; move relevant bits to P
endm
; Macro to restore status flags
; =============================
macro LOAD_P
move.w P,ccr
endm
; Macro to restore status flags within a macro
; ============================================
macro LOAD_P_INTERNAL
move.w P,ccr
endm
; Macro: ABI_CLK
; ==============
; Adds one extra to the clock cycle counter if a page boundary is crossed.
macro ABI_CLK
ifgt 128-\1
moveq #\1,d0
else
move.l #\1,d0
endc
add.b \2,d0
moveq #0,d0
roxl.b #1,d0
addq.b \3,d0
add.l d0,CLOCK
endm
; Macro: IIY_CLK
; ==============
; Adds one extra to the clock cycle counter if a page boundary is crossed.
macro IIY_CLK
ifgt 128-\1
moveq #\1,d0
else
move.l #\1,d0
endc
add.b Y,d0
moveq #0,d0
roxl.b #1,d0
addq.b \2,d0
add.l d0,CLOCK
endm
; Zero Page Indexed
; =================
macro _ZPI
ifgt 128-\1
moveq #\1,d1
else
move.l #\1,d1
endc
add.b \2,d1
endm
; Absolute Indexed
; ================
macro _ABI
ifgt 128-\1
moveq #\1,d1
else
move.l #\1,d1
endc
add.w \2,d1
andi.w #ADDR_MASK,d1
endm
; Indexed Indirect
; ================
macro _IIX
move.l #\1,d1 ; Move offset to temp reg
add.b X,d1 ; Add in index X
move.w (DATA,d1),d1
rol.w #8,d1 ; Adjust Endianness
andi.w #ADDR_MASK,d1
endm
; Indirect Indexed
; ================
macro _IIY
move.w (\1,DATA),d1
rol.w #8,d1
add.w Y,d1 ; Correctly handles word wrap-around
andi.w #ADDR_MASK,d1
endm
; Translation of `adc'
; ====================
; General translation
macro ADC_
move.b P,d1
lsr.b #1,d1
tst.b D_FLAG
bne.s \@1$ ; if in BCD mode
addx.b d0,A
bra.s \@2$
\@1$: move.b A,d1
abcd.b d0,A
eor.b A,d1
eor.b A,d0
and.b d1,d0
move.w ccr,d1
lsr.b #7,d0
lsl.b #4,d1
roxl.b #1,d0
tst.b A
move.w ccr,d1
or.b d0,d1
move.w d1,ccr
\@2$:
endm
; Immediate
macro ADC_IMM
addq.l #2,CLOCK
move.b \1,d0
ADC_
endm
; Zero Page
macro ADC_ZP
addq.l #3,CLOCK
move.b (\1,DATA),d0
ADC_
endm
; Zero Page Indexed
macro ADC_ZPI
addq.l #4,CLOCK
_ZPI \1,\2
move.b (DATA,d1),d0
ADC_
endm
; Absolute
macro ADC_AB
move.b (\1,DATA),d0
ADC_
addq.l #4,CLOCK
endm
; Absolute Indexed
macro ADC_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
move.b (DATA,d1),d0
ADC_
endm
; Indexed Indirect
macro ADC_IIX
addq.l #6,CLOCK
_IIX \1
move.b (DATA,d1),d0
ADC_
endm
; Indirect Indexed
macro ADC_IIY
IIY_CLK \1,#5
_IIY \1
move.b (DATA,d1.w),d0
ADC_
endm
; Translation of `and'
; ====================
; Immediate
macro AND_IMM
addq.l #2,CLOCK
andi.b \1,A
endm
; Zero Page
macro AND_ZP
addq.l #3,CLOCK
and.b (\1,DATA),A
endm
; Zero Page Indexed
macro AND_ZPI
addq.l #4,CLOCK
_ZPI \1,\2
and.b (DATA,d1),A
endm
; Absolute
macro AND_AB
addq.l #4,CLOCK
and.b (\1,DATA),A
endm
; Absolute Indexed
macro AND_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
and.b (DATA,d1),A
endm
; Indexed Indirect
macro AND_IIX
addq.l #6,CLOCK
_IIX \1
and.b (DATA,d1),A
endm
; Indirect Indexed
macro AND_IIY
IIY_CLK \1,#5
_IIY \1
and.b (DATA,d1.w),A
endm
; Translation of `asl'
; ====================
; General translation
macro ASL_
movem.w (\1-1,DATA),d0
asl.b #1,d0
movem.w d0,(\1-1,DATA)
endm
; Accumulator
macro ASL_ACC
addq.l #2,CLOCK
asl.b #1,A ; All these could also be lsl.b
endm
; Zero Page
macro ASL_ZP
addq.l #5,CLOCK
ASL_ \1
endm
; Zero Page Indexed
macro ASL_ZPI
addq.l #6,CLOCK
_ZPI \1,\2
movem.w (-1,DATA,d1),d0
asl.b #1,d0
movem.w d0,(-1,DATA,d1)
endm
; Absolute
macro ASL_AB
addq.l #6,CLOCK
ASL_ \1
endm
; Absolute Indexed
macro ASL_ABI
addq.l #7,CLOCK
_ABI \1,\2
move.w (-1,DATA,d1),d0
asl.b #1,d0
movem.w d0,(-1,DATA,d1)
endm
; Translation of `bcc'
; ====================
macro BCC_
bcs.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `bcs'
; ====================
macro BCS_
bcc.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `beq'
; ====================
macro BEQ_
bne.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `bit'
; ====================
; General translation
macro BIT_
moveq #0,d1
move.b (\1,DATA),d0
bpl.s \@0$
bset.b #negative,d1
\@0$: btst.b #6,d0
beq.s \@1$
bset.b #overflow,d1
\@1$: and.b A,d0
bne.s \@2$
bset.b #zero,d1
\@2$: move.w d1,ccr
endm
; Zero Page
macro BIT_ZP
addq.l #3,CLOCK
BIT_ \1
endm
; Absolute
macro BIT_AB
addq.l #4,CLOCK
BIT_ \1
endm
; Translation of `bmi'
; ====================
macro BMI_
bpl.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `bne'
; ====================
macro BNE_
beq.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `bpl'
; ====================
macro BPL_
bmi.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `brk'
; ====================
macro BRK_
addq.l #7,CLOCK
move.l P,-(sp)
subq.b #2,S
move.b P,(STACK_PAGE,DATA,S)
subq.b #1,S
INTERRUPT
endm
; Translation of `bvc'
; ====================
macro BVC_
bvs.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `bvs'
; ====================
macro BVS_
bvc.s \@1$
addq.l #3+\2,CLOCK
bra \1
\@1$: addq.l #2,CLOCK
endm
; Translation of `clc'
; ====================
macro CLC_
addq.l #2,CLOCK
moveq #0,d0 ; clear carry flag
endm
; Translation of `cld'
; ====================
macro CLD_
addq.l #2,CLOCK
moveq #0,D_FLAG
endm
; Translation of `cli' (not yet implemented)
; ====================
macro CLI_
addq.l #2,CLOCK
endm
; Translation of `clv'
; ====================
macro CLV_
addq.l #2,CLOCK
moveq #0,d0 ; clear overflow flag
endm
; Translation of `cmp'
; ====================
; Immediate
macro CMP_IMM
addq.l #2,CLOCK
cmpi.b \1,A
eori.b #$01,ccr ; flip carry flag
endm
; Zero Page
macro CMP_ZP
addq.l #3,CLOCK
cmp.b (\1,DATA),A
eori.b #$01,ccr ; flip carry flag
endm
; Zero Page Indexed
macro CMP_ZPI
_ZPI \1,\2
cmp.b (DATA,d1),A
addq.l #4,CLOCK
eori.b #$01,ccr ; flip carry flag
endm
; Absolute
macro CMP_AB
addq.l #4,CLOCK
cmp.b (\1,DATA),A
eori.b #$01,ccr ; flip carry flag
endm
; Absolute Indexed
macro CMP_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
cmp.b (DATA,d1),A
eori.b #$01,ccr ; flip carry flag
endm
; Indexed Indirect
macro CMP_IIX
addq.l #6,CLOCK
_IIX \1
cmp.b (DATA,d1),A
eori.b #$01,ccr ; flip carry flag
endm
; Indirect Indexed
macro CMP_IIY
IIY_CLK \1,#5
_IIY \1
cmp.b (DATA,d1.w),A
eori.b #$01,ccr ; flip carry flag
endm
; Translation of `cpx'
; ====================
; Immediate
macro CPX_IMM
addq.l #2,CLOCK
cmpi.b \1,X
eori.b #$01,ccr ; flip carry flag
endm
; Zero Page
macro CPX_ZP
addq.l #3,CLOCK
cmp.b (\1,DATA),X
eori.b #$01,ccr ; flip carry flag
endm
; Absolute
macro CPX_AB
addq.l #4,CLOCK
cmp.b (\1,DATA),X
eori.b #$01,ccr ; flip carry flag
endm
; Translation of `cpy'
; ====================
; Immediate
macro CPY_IMM
addq.l #2,CLOCK
cmpi.b \1,Y
eori.b #$01,ccr ; flip carry flag
endm
; Zero Page
macro CPY_ZP
addq.l #3,CLOCK
cmp.b (\1,DATA),Y
eori.b #$01,ccr ; flip carry flag
endm
; Absolute
macro CPY_AB
addq.l #4,CLOCK
cmp.b (\1,DATA),Y
eori.b #$01,ccr ; flip carry flag
endm
; Translation of `dec'
; ====================
; Zero Page
macro DEC_ZP
addq.l #5,CLOCK
subq.b #1,(\1,DATA)
endm
; Zero Page Indexed
macro DEC_ZPI
addq.l #6,CLOCK
_ZPI \1,\2
subq.b #1,(DATA,d1)
endm
; Absolute
macro DEC_AB
addq.l #6,CLOCK
subq.b #1,(\1,DATA)
endm
; Absolute Indexed
macro DEC_ABI
addq.l #7,CLOCK
_ABI \1,\2
subq.b #1,(DATA,d1.w)
endm
; Translation of `dex'
; ====================
macro DEX_
addq.l #2,CLOCK
subq.b #1,X
endm
; Translation of `dey'
; ====================
macro DEY_
addq.l #2,CLOCK
subq.b #1,Y
endm
; Translation of `eor'
; ====================
; Immediate
macro EOR_IMM
addq.l #2,CLOCK
eori.b \1,A
endm
; Zero Page
macro EOR_ZP
addq.l #3,CLOCK
move.b (\1,DATA),d0
eor.b d0,A
endm
; Zero Page Indexed
macro EOR_ZPI
addq.l #4,CLOCK
_ZPI \1,\2
move.b (DATA,d1),d0
eor.b d0,A
endm
; Absolute
macro EOR_AB
addq.l #4,CLOCK
move.b (\1,DATA),d0
eor.b d0,A
endm
; Absolute Indexed
macro EOR_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
move.b (DATA,d1),d0
eor.b d0,A
endm
; Indexed Indirect
macro EOR_IIX
addq.l #6,CLOCK
_IIX \1
move.b (DATA,d1),d0
eor.b d0,A
endm
; Indirect Indexed
macro EOR_IIY
IIY_CLK \1,#5
_IIY \1
move.b (DATA,d1.w),d0
eor.b d0,A
endm
; Translation of `inc'
; ====================
; Zero Page
macro INC_ZP
addq.l #5,CLOCK
addq.b #1,(\1,DATA)
endm
; Zero Page Indexed
macro INC_ZPI
addq.l #6,CLOCK
_ZPI \1,\2
addq.b #1,(DATA,d1)
endm
; Absolute
macro INC_AB
addq.l #6,CLOCK
addq.b #1,(\1,DATA)
endm
; Absolute Indexed
macro INC_ABI
addq.l #7,CLOCK
_ABI \1,\2
addq.b #1,(DATA,d1)
endm
; Translation of `inx'
; ====================
macro INX_
addq.l #2,CLOCK
addq.b #1,X
endm
; Translation of `iny'
; ====================
macro INY_
addq.l #2,CLOCK
addq.b #1,Y
endm
; Translation of `jmp'
; ====================
; Absolute
macro JMP_AB
addq.l #3,CLOCK
bra \1
endm
; Indirect (not yet implemented)
macro JMP_MI
addq.l #5,CLOCK
bra \1 ; this is wrong
endm
; Translation of `jsr'
; ====================
macro JSR_
addq.l #6,CLOCK
subq.b #2,S
bsr \1
endm
; Translation of `lda'
; ====================
; Immediate
macro LDA_IMM
addq.l #2,CLOCK
move.b \1,A
endm
; Zero Page
macro LDA_ZP
move.b (\1,DATA),A
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro LDA_ZPI
_ZPI \1,\2
move.b (DATA,d1),A
addq.l #4,CLOCK
endm
; Absolute
macro LDA_AB
move.b (\1,DATA),A
addq.l #4,CLOCK
endm
; Absolute Indexed
macro LDA_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
move.b (DATA,d1),A
endm
; Indexed Indirect
macro LDA_IIX
addq.l #6,CLOCK
_IIX \1
move.b (DATA,d1),A
endm
; Indirect Indexed
macro LDA_IIY
IIY_CLK \1,#5
_IIY \1
move.b (DATA,d1.w),A
endm
; Translation of `ldx'
; ====================
; Immediate
macro LDX_IMM
move.b \1,X
addq.l #2,CLOCK
endm
; Zero Page
macro LDX_ZP
move.b (\1,DATA),X
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro LDX_ZPI
_ZPI \1,\2
move.b (DATA,d1),X
addq.l #4,CLOCK
endm
; Absolute
macro LDX_AB
move.b (\1,DATA),X
addq.l #4,CLOCK
endm
; Absolute Indexed
macro LDX_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
move.b (DATA,d1),X
endm
; Translation of `ldy'
; ====================
; Immediate
macro LDY_IMM
move.b \1,Y
addq.l #2,CLOCK
endm
; Zero Page
macro LDY_ZP
move.b (\1,DATA),Y
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro LDY_ZPI
_ZPI \1,\2
move.b (DATA,d1),Y
addq.l #4,CLOCK
endm
; Absolute
macro LDY_AB
move.b (\1,DATA),Y
addq.l #4,CLOCK
endm
; Absolute Indexed
macro LDY_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
move.b (DATA,d1),Y
endm
; Translation of `lsr'
; ====================
; General translation
macro LSR_
movem.w (\1-1,DATA),d0
lsr.b #1,d0
movem.w d0,(\1-1,DATA)
endm
; Accumulator
macro LSR_ACC
addq.l #2,CLOCK
lsr.b #1,A
endm
; Zero Page
macro LSR_ZP
addq.l #5,CLOCK
LSR_ \1
endm
; Zero Page Indexed
macro LSR_ZPI
addq.l #6,CLOCK
_ZPI \1,\2
movem.w (-1,DATA,d1),d0
lsr.b #1,d0
movem.w d0,(-1,DATA,d1)
endm
; Absolute
macro LSR_AB
addq.l #6,CLOCK
LSR_ \1
endm
; Absolute Indexed
macro LSR_ABI
addq.l #7,CLOCK
_ABI \1,\2
move.w (-1,DATA,d1),d0
lsr.b #1,d0
movem.w d0,(-1,DATA,d1)
endm
; Translation of `nop'
; ====================
macro NOP_
addq.l #2,CLOCK
endm
; Translation of `ora'
; ====================
; Immediate
macro ORA_IMM
ori.b \1,A
addq.l #2,CLOCK
endm
; Zero Page
macro ORA_ZP
or.b (\1,DATA),A
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro ORA_ZPI
_ZPI \1,\2
or.b (DATA,d1),A
addq.l #4,CLOCK
endm
; Absolute
macro ORA_AB
or.b (\1,DATA),A
addq.l #4,CLOCK
endm
; Absolute Indexed
macro ORA_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
or.b (DATA,d1),A
endm
; Indexed Indirect
macro ORA_IIX
addq.l #6,CLOCK
_IIX \1
or.b (DATA,d1),A
endm
; Indirect Indexed
macro ORA_IIY
IIY_CLK \1,#5
_IIY \1
or.b (DATA,d1.w),A
endm
; Translation of `pha'
; ====================
macro PHA_
addq.l #3,CLOCK
move.l A,-(sp)
move.b A,(STACK_PAGE,DATA,S)
subq.b #1,S
endm
; Translation of `php'
; ====================
macro PHP_
move.l P,-(sp)
move.b P,(STACK_PAGE,DATA,S)
subq.b #1,S
addq.l #3,CLOCK
endm
; Translation of `pla'
; ====================
macro PLA_
move.l (sp)+,A ; discarded
addq.b #1,S
move.b (STACK_PAGE,DATA,S),A
addq.l #4,CLOCK
endm
; Translation of `plp'
; ====================
macro PLP_
addq.l #4,CLOCK
move.l (sp)+,P ; discarded
addq.b #1,S
move.w (STACK_PAGE-1,DATA,S),ccr
endm
; Translation of `rol'
; ====================
; General translation
macro ROL_
move.w (\1-1,DATA),d0
move.b P,d1
lsr.b #1,d1
roxl.b #1,d0
movem.w d0,(\1-1,DATA)
endm
; Accumulator
macro ROL_ACC
addq.l #2,CLOCK
move.b P,d1
lsr.b #1,d1
roxl.b #1,A
endm
; Zero Page
macro ROL_ZP
addq.l #5,CLOCK
ROL_ \1
endm
; Zero Page Indexed
macro ROL_ZPI
addq.l #6,CLOCK
_ZPI \1,\2
move.b P,d0
lsr.b #1,d0
movem.w (-1,DATA,d1),d0
roxl.b #1,d0
movem.w d0,(-1,DATA,d1)
endm
; Absolute
macro ROL_AB
addq.l #6,CLOCK
ROL_ \1
endm
; Absolute Indexed
macro ROL_ABI
addq.l #6,CLOCK
_ABI \1,\2
move.b P,d0
lsb.b #1,d0
movem.w (-1,DATA,d1.w),d0
roxl.b #1,d0
movem.w d0,(-1,DATA,d1.w)
endm
; Translation of `ror'
; ====================
; General translation
macro ROR_
move.w (\1-1,DATA),d0
move.b P,d1
lsr.b #1,d1
roxr.b #1,d0
movem.w d0,(\1-1,DATA)
endm
; Accumulator
macro ROR_ACC
addq.l #2,CLOCK
move.b P,d1
lsr.b #1,d1
roxr.b #1,A
endm
; Zero Page
macro ROR_ZP
addq.l #5,CLOCK
ROR_ \1
endm
; Zero Page Indexed
macro ROR_ZPI
addq.l #6,CLOCK
_ZPI \1,\2
move.b P,d0
lsr.b #1,d0
movem.w (-1,DATA,d1),d0
roxr.b #1,d0
movem.w d0,(-1,DATA,d1)
endm
; Absolute
macro ROR_AB
addq.l #6,CLOCK
ROR_ \1
endm
; Absolute Indexed
macro ROR_ABI
addq.l #6,CLOCK
_ABI \1,\2
move.b P,d0
lsb.b #1,d0
movem.w (-1,DATA,d1.w),d0
roxr.b #1,d0
movem.w d0,(-1,DATA,d1.w)
endm
; Translation of `rti'
; ====================
macro RTI_
addq.l #6,CLOCK
move.l (sp)+,a0
move.l (sp)+,P ; discarded
addq.b #1,S
move.b (STACK_PAGE-1,DATA,S),P
addq.b #2,S
move.w P,ccr
jmp (a0)
endm
; Translation of `rts'
; ====================
macro RTS_
addq.l #6,CLOCK
addq.b #2,S
rts
endm
; Translation of `sbc'
; ====================
; General translation
macro SBC_
move.b P,d1
eori.b #$01,d1
lsr.b #1,d1
tst.b D_FLAG
bne.s \@1$ ; if in BCD mode
subx.b d0,A
bra.s \@2$
\@1$: ori.b #$04,ccr ; set zero flag
sbcd.b d0,A
\@2$: eori.b #$1,ccr ; flip carry bit
endm
; Immediate
macro SBC_IMM
addq.l #2,CLOCK
move.b \1,d0
SBC_
endm
; Zero Page
macro SBC_ZP
move.b (\1,DATA),d0
SBC_ \1
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro SBC_ZPI
_ZPI \1,\2
move.b (DATA,d1),d0
SBC_
addq.l #4,CLOCK
endm
; Absolute
macro SBC_AB
move.b (\1,DATA),d0
SBC_
addq.l #4,CLOCK
endm
; Absolute Indexed
macro SBC_ABI
ABI_CLK \1,\2,#4
_ABI \1,\2
move.b (DATA,d1),d0
SBC_
endm
; Indexed Indirect
macro SBC_IIX
_IIX \1
move.b (DATA,d1),d0
SBC_
addq.l #6,CLOCK
endm
; Indirect Indexed
macro SBC_IIY
IIY_CLK \1,#5
_IIY \1
move.b (DATA,d1.w),d0
SBC_
endm
; Translation of `sec'
; ====================
macro SEC_
addq.l #2,CLOCK
move.b #$01,ccr ; set carry bit
endm
; Translation of `sed'
; ====================
macro SED_
addq.l #2,CLOCK
moveq #1,D_FLAG
endm
; Translation of `sei'
; ====================
macro SEI_
addq.l #2,CLOCK
endm
; Translation of `sta'
; ====================
; Zero Page
macro STA_ZP
addq.l #3,CLOCK
move.b A,(\1,DATA)
endm
; Zero Page Indexed
macro STA_ZPI
_ZPI \1,\2
move.b A,(DATA,d1)
addq.l #4,CLOCK
endm
; Absolute
macro STA_AB
move.b A,(\1,DATA)
addq.l #4,CLOCK
endm
; Absolute Indexed
macro STA_ABI
addq.l #5,CLOCK
_ABI \1,\2
move.b A,(DATA,d1)
endm
; Indexed Indirect
macro STA_IIX
_IIX \1
move.b A,(DATA,d1)
addq.l #6,CLOCK
endm
; Indirect Indexed
macro STA_IIY
_IIY \1
move.b A,(DATA,d1.w)
addq.l #6,CLOCK
endm
; Translation of `stx'
; ====================
; Zero Page
macro STX_ZP
move.b X,(\1,DATA)
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro STX_ZPI
_ZPI \1,\2
move.b X,(DATA,d1)
addq.l #4,CLOCK
endm
; Absolute
macro STX_AB
move.b X,(\1,DATA)
addq.l #4,CLOCK
endm
; Translation of `sty'
; ====================
; Zero Page
macro STY_ZP
move.b Y,(\1,DATA)
addq.l #3,CLOCK
endm
; Zero Page Indexed
macro STY_ZPI
_ZPI \1,\2
move.b Y,(DATA,d1)
addq.l #4,CLOCK
endm
; Absolute
macro STY_AB
move.b Y,(\1,DATA)
addq.l #4,CLOCK
endm
; Translation of `tax'
; ====================
macro TAX_
move.b A,X
addq.l #2,CLOCK
endm
; Translation of `tay'
; ====================
macro TAY_
move.b A,Y
addq.l #2,CLOCK
endm
; Translation of `tsx'
; ====================
macro TSX_
move.b S,X
addq.l #2,CLOCK
endm
; Translation of `txa'
; ====================
macro TXA_
move.b X,A
addq.l #2,CLOCK
endm
; Translation of `txs'
; ====================
macro TXS_
addq.l #2,CLOCK
move.b X,S
endm
; Translation of `tya'
; ====================
macro TYA_
move.b Y,A
addq.l #2,CLOCK
endm
endc